約 2,990,442 件
https://w.atwiki.jp/bf_4/pages/464.html
データテーブル 項目説明 各武器クロスヘア比較表 このページの使い方 注意 データ参照元1 ― Symthic | BF4 Weapon Stats Weapon Charts, Weapon Comparison - Damage, Accuracy etc. データ参照元2 ― Battlelog / Battlefield 4 このページは詳細データ版です。 簡易データ版は武器をご覧下さい。 データテーブル 2014年9月30日のパッチ反映済 ②→ RPM Bs Mr Md md Ra Re Ru Rl Rr Rd Rm As Am Ss Cs Ps Sm Cm Pm Sis Sds P226 400 350 525 27.0 12.1 1.3 1.4 0.40 0.40 0.20 12 1.0 0.50 0.50 1.0 1.0 1.0 1.5 1.5 1.5 0.200 15 M9 400 380 570 27.0 12.1 1.3 1.6 0.45 0.30 0.30 12 1.0 0.50 0.50 1.0 1.0 1.0 1.5 1.5 1.5 0.200 15 QSZ-92 455 340 510 22.0 12.1 1.3 1.6 0.40 0.30 0.30 20 1.0 0.50 0.50 1.0 1.0 1.0 1.5 1.5 1.5 0.200 15 MP443 380 320 480 27.0 12.1 1.2 1.3 0.70 0.10 0.10 20 1.0 0.50 0.50 1.0 1.0 1.0 1.5 1.5 1.5 0.200 15 SHORTY 12G 120 300 300 18.0 6.0 0.7 0.7 1.00 0.30 6 1.0 0.10 0.80 1.0 1.0 1.0 1.5 1.5 1.5 0.300 15 G18 900 380 570 18.0 10.8 1.2 1.5 0.70 0.40 0.40 30 2.0 0.60 0.60 1.5 1.5 1.5 2.0 2.0 2.0 0.500 15 FN57 455 430 645 22.0 12.1 1.3 1.4 0.70 0.10 0.10 20 1.0 0.50 0.50 1.0 1.0 1.0 1.5 1.5 1.5 0.200 15 M1911 310 310 465 36.6 15.4 1.2 1.3 0.60 0.10 0.10 18 1.0 0.20 0.40 1.0 1.0 1.0 1.5 1.5 1.5 0.200 15 93R 900 380 570 18.0 10.8 1.4 1.6 0.50 0.20 0.20 30 2.0 0.60 0.60 1.5 1.5 1.5 2.0 2.0 2.0 0.250 15 CZ-75 360 380 570 30.0 14.6 1.4 1.6 0.60 0.10 0.10 12 1.0 0.40 0.54 1.0 1.0 1.0 1.5 1.5 1.5 0.200 15 .44 MAGNUM 150 460 690 56.0 37.5 4.0 4.0 2.00 0.20 0.20 4 1.0 0.10 1.00 1.0 1.0 1.0 1.5 1.5 1.5 0.300 15 COMPACT 45 320 270 405 36.6 15.4 1.2 1.3 0.70 0.10 0.10 20 1.0 0.40 0.50 1.0 1.0 1.0 1.5 1.5 1.5 0.200 15 M412 REX 180 400 600 56.0 28.0 3.4 3.4 2.00 0.20 0.20 6 1.0 0.30 0.50 1.0 1.0 1.0 1.5 1.5 1.5 0.300 15 SW40 220 400 600 56.0 28.0 3.8 3.8 2.00 0.22 0.22 6 1.0 0.50 0.70 1.0 1.0 1.0 1.5 1.5 1.5 0.500 15 UNICA 6 210 440 660 56.0 28.0 4.1 4.1 2.00 0.20 0.20 6 1.0 0.40 0.60 1.0 1.0 1.0 1.5 1.5 1.5 0.400 15 DEAGLE 44 220 320 480 56.0 28.0 2.8 3.2 2.00 0.35 0.35 4 1.0 0.35 1.00 1.0 1.0 1.0 1.5 1.5 1.5 0.500 15 include_js plugin Error このプラグインで利用できない命令または文字列が入っています。 include_js plugin Error このプラグインで利用できない命令または文字列が入っています。 $( #button ).append( ); function makeTable() { var src = $( #src ).children( table ); $( #dest ).append( ); var dest = $( #dest ).children( table ); dest.addClass( tablesorter ); dest.append( ); dest.append( ); dest.append( ); dest.append( ); srcHead = src.find( .atwiki_tr_1 ); srcHead.html(srcHead.html().replace(/td/ig, th )); srcHead.appendTo( #tableHead ); src.find( tr ).appendTo( #tableBody ); dest.tablesorter({sortList [[0,0]], widgets [ zebra ]}); $( #src ).empty(); $( #button ).html( ); } 項目説明 RPM:1分間あたりの発射数 Bs:Bullet speed(弾速 - メートル/秒) Mr:Max range(最大射程距離 - メートル) Md:Max damage(最大ダメージ) md:Min damage(最小ダメージ) Ra:Reload add(弾薬追加時リロード時間 - 秒) Re:Reload empty(弾倉空時リロード時間 - 秒) Ru:Recoil up(上方リコイル) Rl:Recoil left(左方リコイル) Rr:Recoil right(右方リコイル) Rd:Recoil decrease(射撃停止後の秒毎リコイル改善値) Rm:Recoil multiplier(初弾のリコイル増加倍率) As:ADS spread by stop(停止時のADS精度) Am:ADS spread by move(移動時のADS精度) Ss:HIP spread by stand and stop(立ち状態×停止時の腰撃ち精度) Cs:HIP spread by crouch and stop(しゃがみ状態×停止時の腰撃ち精度) Ps:HIP spread by prone and stop(伏せ状態×停止時の腰撃ち精度) Sm:HIP spread by stand and move(立ち状態×移動時の腰撃ち精度) Cm:HIP spread by crouch and move(しゃがみ状態×移動時の腰撃ち精度) Pm:HIP spread by prone and move(伏せ状態×移動時の腰撃ち精度) Sis:Spread increase per shot(射撃毎の精度低下値) Sds:Spread decrease per second(射撃停止後の秒毎精度改善値) 各武器クロスヘア比較表 アイサンサイト以外武器拡張無し・立ち状態腰撃ち P226 M9 QSZ-92 MP443 SHORTY 12G G18 FN57 M1911 93R CZ-75 .44 MAGNUM COMPACT 45 M412 REX このページの使い方 テーブルの上方にある「ソート対応のテーブルを作成」を押し、「テーブルソート可能状態」にします。 その後各項目名をクリックするたびに、昇順と降順で数値が入れ替わります。 ちなみに各項目で最も優れた数値の色分けは、ソートスクリプトの誤作動を引き起こすため実装できませんでした。 注意 見やすいテーブルを作成するため、弾丸落下係数・ダメージ低下開始距離・リロードキャンセル時の速度・弾薬数を割愛し、 一部小数点以下の数値を四捨五入して桁を繰り上げております。 またテーブルの表示は「Blink」採用ブラウザにて、正常な表示を確認しています。 そのほかのエンジンを利用したブラウザでは、若干の表示ズレが発生することがあります。 rakuten_design= slide ;rakuten_affiliateId= 0ceff441.bb3e12e2.0ceff442.46644b8a ;rakuten_items= ctsmatch ;rakuten_genreId= 100026 ;rakuten_size= 728x90 ;rakuten_target= _blank ;rakuten_theme= gray ;rakuten_border= off ;rakuten_auto_mode= on ;rakuten_genre_title= off ;rakuten_recommend= on ;
https://w.atwiki.jp/tetdm/pages/14.html
char 文字データ int 符号付整数 float 浮動小数点 double 倍精度浮動小数点 boolean 論理値 は ない. #include stdio.h main() { char a; a = X ; }
https://w.atwiki.jp/data_net/
ログインしないと編集はおろか、閲覧さえできません。 会員制ってことでおねがいします。 ログイン Data.netのおしらせ 08/04/05 就職情報更新 08/04/05 Data.netのロゴ結果発表 08/04/01 就職活動情報追加 08/04/01 4月中に飲み会しようぜ! 08/03/26 就職情報の記事はじめました 08/03/19 wikiの構文紹介記事を追加 学科のおしらせ 08/**/** 特になし 利用方法 利用の前に読んでね。 Data.netのサイトマップ(コンテンツ解説) 管理人にメールを送る ログイン登録 ログインIDの専用登録をしたい方は以下のリンクから、データを送ってください。 管理人が生きていたら、発行させていただきます。 ログイン登録 お気に入りに登録する(InternetExplorer5.0以上のみ対応) 記者:関谷スノウ 2008-03-24 16 42 23 (Mon)
https://w.atwiki.jp/memo77/pages/25.html
PageLastUpdate 2010-04-14/today - /yesterday - クリックすると見出し一覧を表示します 自作クラスとか最近やっと構造化例外処理と継承の基本が理解できた DataGridViewのグリッド、行、列、セルのReadOnlyプロパティの相関関係 NotifyIconはExplorer強制終了時のトレイアイコンの再描画も勝手にやってくれる 指定したウインドウを強制的にフォアグラウンドウィンドウに設定 .Net Remotingの「IPC ポートを作成できません。アクセスが拒否されました。」を解消 DataGridViewとDataGridのキーボード ショートカットの比較 ESCキーで行の変更をキャンセルするDataGridView Microsoft Visual Studio International Pack 1.0 My.Settingsの構成ファイルの場所を取得する。 Partial Classをメインのクラスのツリー下に配置する C#→VB.netへのコード変換サービス Visual Studio 2005 SP1 統合 installer の作成方法 再帰的にコントロールの親をたどって、ピリオド区切りでパスを返す関数 VBScriptのエラーコードメモ Visual Studio 2008 Express Edition チェックボックスでスプリットコンテナのパネルの表示をOn/Offする 配列をリストに変換する 型比較でハマる NewGUIDを文字列にするときの引数 My.Settingsに連結したコントロール間でChangedイベントで値をやり取りすると値が書き戻されることがある DataSet中の複数のテーブルをAccessのように連結して扱う 継承コントロールをデザイナで削除すると「インデックスが範囲を超えています」のエラー 継承したテキストボックスをフォームから削除しようとすると、エラーが出て削除されない。 ComboBoxに連結したDataTableが意図せずに変更される Express Edition ではセットアップ用のmsiはつくれない ComboBoxにはDoubleClickイベントがないのね CSVの読み込み 相手先別に添付ファイルを変更するメール送信ソフトを作ってみよう コンボボックスに高速にデータをBindするDataSourceを先に設定した場合 DataSourceを後に設定した場合 Microsoft Win32 と Microsoft .NET Framework API との対応 2005でデザイナから自動生成されるDataTableでのDBNull タイマーとメッセージボックス ワークステーションのロック LDAPとActive Directoryの要素の比較 DirectorySearcher手ごわい System.DirectoryServices.DirectoryEntry.SchemaClassNameの一覧 SelectCommandでデータ書き込むストアド指定するとコミットされない・・・んー 2005のヘルプにCrystal Reportのヘルプを追加とか TreeView使ってみた アップキャストとダウンキャスト IIFとdecimalでハマる GrapeCity FlexGrid for .NET 2.0J VB.Netに関する資料 ArrayListとList プロパティにオブジェクトを設定したときにNewのタイミング 自分自身と同じ型のコレクションをプロパティに持つ DateTimeメモ 再帰型のクラスでちょっとはまったこと ライブラリメモ LinkLabel ハッシュテーブル With Nothingを使って変数を局所化 共有メンバ よくつかうリンク comment オブジェクト指向から勉強中。ヘタレた内容だけど笑わないでね。 自作クラスとか DataGridViewEx 2007/11/19 拡張DataGridView。列位置や幅のユーザー別の保存とか DataGridViewSynchronizer 2007/11/13 上下に並べたふたつのDataGridViewの列表示を同期させるクラス。 WorkStationLockController 2007/07/16 PCのロックをしたりロック状態を取得するクラス DebugTimer 2007/07/23 デバッグ時に処理ごとのパフォーマンスを計測するクラス 最近やっと構造化例外処理と継承の基本が理解できた 2010/03/27 5年目にしてやっとわかったよ。片手間プログラマーはだめだなあ。 いままでのコードが恥ずかしてく、もう全部書き直したい。 公開しているコードもずっといいコードが書けるようになっているので、そのうち直す。かも。 DataGridViewのグリッド、行、列、セルのReadOnlyプロパティの相関関係 2010/03/27 1.グリッドのReadOnlyがTrueならセルのReadOnlyは実際に設定されている値とは別にReadOnlyを返します。 2.列のReadOnlyもしくは行のReadOnlyを変化させたときはTrueの時のみセルのReadOnlyが変更されます。 →True セルのReadOnlyもTrue →False セルのReadOnlyは変化しない(ReadOnly=Trueのセルは書き込めず、Falseのセルは書き込めるようになる) プロパティ部分をコードで書くとこんな感じ(雰囲気だけつかんでね)。 Public Property GridReadOnly() As Boolean Get Return _gridReadOnly End Get Set(ByVal value As Boolean) _gridReadOnly = value End Set End Property Public Property CellReadOnly() As Boolean Get If Me.Grid.ReadOnly = True Then Return True Else Return _cellReadOnly End If End Get Set(ByVal value As Boolean) _readOnly = value End Set End Property Public Property RowReadOnly() As Boolean Get Return _rowReadOnly End Get Set(ByVal value As Boolean) If value = True Then For Each cell As DataGridViewCell In Me.cells cell.ReadOnly = True Next End If _rowReadOnly = value End Set End Property Public Property ColumnReadOnly() As Boolean Get Return _columnReadOnly End Get Set(ByVal value As Boolean) If value = True Then For Each cell As DataGridViewCell In Me.cells cell.ReadOnly = True Next End If _columnReadOnly = value End Set End Property NotifyIconはExplorer強制終了時のトレイアイコンの再描画も勝手にやってくれる 2009/01/14 タスクトレイにアイコンを作成するアプリの作りが悪いと、エクスプローラーが強制終了したときに、プロセスだけ残ってトレイアイコンが消えてしまいます。 タスクマネージャからエクスプローラーを再起動しても、トレイアイコンは勝手には戻ってくれません。 これに対応するにはアプリケーション側でRegisterWindowMessage("TaskbarCreated")を拾ってやらないといけないわけですが、NotifyIconはこれも勝手にやってくれている模様。 偉いですね。 指定したウインドウを強制的にフォアグラウンドウィンドウに設定 2009/01/14 検索語:最前面、アクティブ、フォーム 久しぶりにプログラミング。APIを使わなければいけないにしろ、どこまでマネージドコードで書こうか悩む。 どうせ一関数内なら、全部APIにしちゃったほうが見通しがいいような気もするけど・・・ DllImport("user32.dll") Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As Boolean End Function DllImport("user32.dll") Private Shared Function GetForegroundWindow() As IntPtr End Function DllImport("user32.dll") Private Shared Function ShowWindowAsync(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean End Function Private Const SW_RESTORE As Integer = 9 画面を元の大きさに戻す DllImport("user32.dll") Private Shared Function IsIconic(ByVal hWnd As IntPtr) As Boolean End Function DllImport("user32.dll") Private Shared Function GetWindowThreadProcessId(ByVal hwnd As IntPtr, ByRef lpdwProcessId As Integer) As Integer End Function DllImport("user32.dll") Private Shared Function AttachThreadInput(ByVal idAttach As Integer, ByVal idAttachTo As Integer, ByVal fAttach As Boolean) As Boolean End Function Public Shared Sub ActivateWindow(ByVal myHandle As System.IntPtr) Static myThreadProcessId As Integer = GetWindowThreadProcessId(myHandle, 0 ) こっちでもいいけど Static myThreadProcessId As Integer = System.Threading.Thread.CurrentThread.ManagedThreadId If IsIconic(myHandle) Then ShowWindowAsync(myHandle, SW_RESTORE) End If Static fgHandle As System.IntPtr = GetForegroundWindow() If myHandle fgHandle Then Dim fgThreadProcessId As Integer = GetWindowThreadProcessId(fgHandle, 0 ) AttachThreadInput(myThreadProcessId, fgThreadProcessId, True) SetForegroundWindow(myHandle) AttachThreadInput(myThreadProcessId, fgThreadProcessId, False) End If End Sub .Net Remotingの「IPC ポートを作成できません。アクセスが拒否されました。」を解消 2009/01/05 この情報は誤りでした。環境依存っぽい。 2009/01/04 検索語:開けない 1.アプリAを起動してチャンネルAを登録。こんなカンジ。 channel = New IpcServerChannel("ChannelA") ChannelServices.RegisterChannel(channel, False) RemotingConfiguration.RegisterWellKnownServiceType(myServiceClass.GetType, "ServiceClass", Runtime.Remoting.WellKnownObjectMode.SingleCall) 2.アプリBからChannelAに接続してなんか(Moge)する Public Sub Hoge Dim myServiceClass As ServiceClass = Activator.GetObject(GetType(ServiceClass), "ipc /ChannelA/ServiceClass") myServiceClass.Moge End Sub 3.アプリAを終了 4.アプリAを起動→「IPC ポートを作成できません。アクセスが拒否されました。」のエラー これに2年近く悩まされていたんですよ。 ポートを解放してくれるまでの時間を計測したり、再起動時に空くのを待機させてみたり、リース期間をアレコレいじったり。 つい最近まで「Windowsがポートを捕まえてる」んだと思ってたんですが、アプリBを落としてからアプリAを起動するとエラーが出ない。 アプリBがポートを捕まえてるという前提で見直して駄目もとでNothingを叩き込んでみる。 Public Sub Hoge Dim myServiceClass As ServiceClass = Activator.GetObject(GetType(ServiceClass), "ipc /ChannelA/ServiceClass") myServiceClass.Moge myServiceClass = Nothing ←コレを追加 End Sub なんとエラーが出なくなりました! ……お前、スコープってorz ちょっとでも怪しいと思ったところでは、リソースの開放は意識的にやるべきだという教訓。 DataGridViewとDataGridのキーボード ショートカットの比較 2008/06/17 DataGridViewのキーボード ショートカットを探したけど見つけられないorz とりあえずWindows フォームの DataGrid コントロール内の移動に使用できるキーボード ショートカットを元に、実際に動作検証をして比較表を作成してみた。 DataGridViewのキーボード ショートカットがまとめられているところか、この表に載っていない機能がありましたら、ぜひ教えて下さい(_o_) 印刷用にExcelファイルも用意しておきました→ダウンロード 区分 動作 DataGrid DataGridView 移動/外 タブ オーダー内の次のコントロールに移動します。 Ctrl + Tab ○ タブ オーダー内の 1 つ前のコントロールに移動します。 Ctrl + Shift + Tab ○ 移動/内 現在の行にある最初のセルに移動します。 Home ○ 現在の行にある最後のセルに移動します。 End ○ セルにフォーカスがある場合は、同一行の次のセルに移動します。行の最後のセルにフォーカスがある場合は次の行の最初のセルに移動します。 Tab ○ セルにフォーカスがある場合は、同一行の 1 つ前のセルに移動します。行の最初のセルにフォーカスがある場合は 1 つ前の行の最後のセルに移動します。 Shift + Tab ○ 矢印の方向にある最も遠い、空白でないセルへ移動します。 Ctrl + 方向キー × 左上のセルへ移動します。 Ctrl + Home ○ 右下のセルへ移動します。 Ctrl + End ○ 編集 現在のセルへの入力を終了し、次のセルへ移動します。 Enter ○ セル内が編集モードの場合は、セルの編集をキャンセルします。 Esc ○ マーキー選択の場合は、該当する行の編集をキャンセルします。 × セルを編集するときに、カーソル位置の前にある文字列を削除します。 BackSpace ○ セルを編集するときに、カーソル位置の後にある文字列を削除します。 Delete ○ 現在のセルの文字列を強調表示し、行の最後にカーソルを位置付けます。セルをダブルクリックするのと同じ動作になります。 F2 △ EditMode=EditOnEnter セルがフォーカスを受け取ったときに編集が開始されます。このモードは、Tab キーを押して行に値を入力するとき、または Enter キーを押して列に値を入力するときに便利です。 × フォーカス取得時 EditMode=EditOnF2 セルにフォーカスがあるときに F2 キーを押すと、編集が開始されます。このモードは、セルの内容の末尾を選択します。 × F2 EditMode=EditOnKeystroke セルにフォーカスがあるときに英数字キーを押すと、編集が開始されます。 × A-Za-z0-9 EditMode=EditOnKeystrokeOrF2 セルにフォーカスがあるときに英数字キーまたは F2 キーを押すと、編集が開始されます。 × A-Za-z0-9,F2 EditMode=EditProgrammatically BeginEdit メソッドが呼び出されたときにだけ編集が開始されます。 × BeginEdit 現在の行で EndEdit メソッドを呼び出します。 Ctrl + Enter ○ 編集モードのときにセルに System.DBNull.Value 値を入力します。 Ctrl + 0 ○ 選択 選択範囲を矢印の方向に 1 行分拡張します (子テーブルのリンクは除外します)。 Shift + ↑ または Shift + ↓ ○ 矢印の方向にある最も遠い、空白でない行まで選択範囲を拡張します (子テーブルのリンクは除きます)。 Ctrl + Shift + ↑ または Ctrl + Shift + ↓ × 一番上の行まで選択範囲を拡張します。 Ctrl + Shift + Home ○ 一番下の行まで選択範囲を拡張します。 Ctrl + Shift + End ○ 現在の行を選択します (子テーブルのリンクは除きます)。 Shift + Space △ SelectionMode=ColumnHeaderSelectのとき現在の列を選択 - Shift + Space SelectionMode=RowHeaderSelectのとき現在の行を選択 - Shift + Space グリッド全体を選択します (子テーブルのリンクは除きます)。 Ctrl + A ○ 選択範囲を 1 画面分下に拡張します (子テーブルのリンクは除きます)。 Shift + PageDown ○ 選択範囲を 1 画面分上に拡張します (子テーブルのリンクは除きます)。 Shift + PageUp ○ 子 フォーカスが子テーブルのリンクにある場合は、その子テーブルに移動します。 Enter - 子テーブルへのリンクを展開します。Alt キーを押しながら ↓ キーを押すと、選択されているリンクだけでなく、すべてのリンクが展開されます。 Alt + ↓ または Ctrl + プラス記号 (+) 子テーブルへのリンクを折りたたみます。Alt キーを押しながら ↑ キーを押すと、選択されているリンクだけでなく、すべてのリンクが折りたたまれます。 Alt + ↑ または Ctrl + マイナス記号 (-) 子テーブル内の場合は、親テーブルの行を表示します。 Ctrl + PageDown 子テーブル内の場合は、親テーブルの行を非表示にします。 Ctrl + PageUp フォーカスが行の最後のセルにある場合は、その行の最初の子テーブルへのリンクへ移動し、展開します。 Tab 子リンクにフォーカスがある場合は、次の子リンクに移動します。 最後の子リンクにフォーカスがある場合は、次の行の最初のセルに移動します。 行の最初のセルにフォーカスがある場合は、1 つ前の行の最後に展開された子テーブルへのリンク、または 1 つ前の行の最後のセルに移動します。 Shift + Tab 子リンクにフォーカスがある場合は、1 つ前の子リンクに移動します。 最初の子リンクにフォーカスがある場合は、1 つ前の行の最後のセルに移動します。 子テーブル内の場合は、親テーブルへ移動します。[戻る] をクリックするのと同じ動作になります。 Alt + ← ESCキーで行の変更をキャンセルするDataGridView 2008/06/16 検索語:キーボード ショートカット エスケープ DataTable DataGridViewはESCキーで編集のキャンセルができないので、とりあえず作ってみた。 Bindしている行がDataRowViewにDirectCastできるのが前提条件です。 Public Class DataGridViewEx Inherits DataGridView Private _rejectbyescape As RejectByEscapeType = RejectByEscapeType.None Public Enum RejectByEscapeType As Integer None = 0 CurrentRow = 1 SelectedRows = 2 End Enum Public Property RejectByEscape() As RejectByEscapeType Get Return _rejectbyescape End Get Set(ByVal value As RejectByEscapeType) _rejectbyescape = value End Set End Property Private Sub DataGridViewEx_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown Try If e.KeyCode = Keys.Escape Then 編集モードではなくReadOnlyでもなければRejectChanges (グリッドがReadOnlyのときはCurrentRowも自動的にReadOnlyになるのでCurrentRowだけで判定してOK) If (IsCurrentCellInEditMode = False) And (CurrentRow.ReadOnly = False) Then Select Case _rejectbyescape Case RejectByEscapeType.CurrentRow DirectCast(Me.CurrentRow.DataBoundItem, DataRowView).Row.RejectChanges() Case RejectByEscapeType.SelectedRows For Each dgvr As DataGridViewRow In SelectedRows DirectCast(dgvr.DataBoundItem, DataRowView).Row.RejectChanges() Next End Select End If End If Catch ex As Exception MessageBox.Show(ex.ToString ex.Message) End Try End Sub End Class Microsoft Visual Studio International Pack 1.0 2008/04/11 http //www.microsoft.com/downloads/details.aspx?FamilyID=f9cfc884-1f00-45fa-b2fb-303d9e110bc7 DisplayLang=ja East Asia Numeric Formatting Library 数値データを日本語、繁体字中国語、簡体字中国語および韓国語における漢数字の文字列に変換します。 Japanese Kana Conversion Library ひらがな、カタカナ、半角カタカナの相互変換、およびローマ字の変換をします。 Japanese Text Alignment Library 日本語固有の均等割付を用いて文字列を描画します。 Japanese Yomi Auto-Completion Library 日本語IME における読みの入力に対応したオートコンプリート機能を提供するライブラリとサンプルのTextBox コントロールを提供します。 My.Settingsの構成ファイルの場所を取得する。 2008/03/25 検索語:exe.config、user.config、ApplicationSettingsBase アプリケーション構成ファイル System.AppDomain.CurrentDomain.SetupInformation.ConfigurationFile ユーザー構成ファイル ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath ネタ元:http //www.atmarkit.co.jp/fdotnet/dotnettips/558appsettings/appsettings.html ちなみに同一記事にもかかれているが、2005ではローミングユーザーであってもローカルユーザーのユーザー構成ファイルが使われてしまうようだ。せっかくローミングにも対応するように設計したつもりだったけど意味無い・・・。 別課題:過去の設定ファイル消せないと気持ち悪い。 Partial Classをメインのクラスのツリー下に配置する 2008/03/24 projファイルの中から目的の分割クラスの記述を見つけ、DependentUpon行を追加すればOK。 Compile Include="MainForm.Menu.vb" DependentUpon MainForm.vb /DependentUpon ←この行を追加 SubType Form /SubType /Compile SubTypeは消してもVisual Stdio上で一回開いて保存すると元に戻る。 C#→VB.netへのコード変換サービス 2008/03/24 http //codeconverter.sharpdevelop.net/Convert.aspx 使ってみた中ではコレが一番だった。 Visual Studio 2005 SP1 統合 installer の作成方法 2008/01/30 http //blogs.wankuma.com/tyappi/archive/2008/01/05/116016.aspx 再帰的にコントロールの親をたどって、ピリオド区切りでパスを返す関数 2008/01/21 例えばForm1のPanel1に乗っているTextbox1なら Form1.Panel1.TextBox1 と帰ってきます。 Public Function ControlPath(ByVal ctl As Control) As String Try If ctl.Parent Is Nothing Then Return ctl.Name Else Return ControlPath(ctl.Parent) "." ctl.Name End If Catch ex As Exception MessageBox.Show(ex.ToString) Return "" End Try End Function VBScriptのエラーコードメモ 2007/12/25 Descriptionが定義されていないものがある。一覧が見つけられない・・・。誰か教えて。 エラーコード 内容 -2147024843 たぶんネットワークパスが見つからないとき。 Visual Studio 2008 Express Edition 2007/12/18 ついにきました。まあいきなりインストールするわけにもいかないから、遊ぶのは正月休みですね。不具合情報の様子見でw なんと窓の杜から落とせるよ。 http //www.forest.impress.co.jp/lib/stdy/program/progdevenv/vbexedition.html ……と思ったら違いました。ダウンロード先は「作者サイト」になってるのね。 チェックボックスでスプリットコンテナのパネルの表示をOn/Offする 2007/12/06 検索語:CheckBoxでSplitContainerのPanelをOn/Off、反転、True、False SplitContainerのパネルを片側消したかったけど、Visibleでスプリッタが動いてくれないので「なんで?」と探したらPanel1Collapsed/Panel2Collapsedというわかりにくいプロパティでした。ヘルプには「縮小または展開するかどうかを決定する値を取得または設定します。」と書いてある。表現がわかりにくいっちゅうの。 で、チェックボックスをOnにしたときに表示、Offにしたときに非表示にしたいんだけど、CheckedとCollapsedの単純バインディングだと逆になってしまうので、Bindingオブジェクトの拡張クラスをつくってみた。 Private Class BindingReverseBoolean Inherits Binding Public Sub New(ByVal propertyName As String, ByVal dataSource As Object, ByVal dataMember As String) MyBase.New(propertyName, dataSource, dataMember, False, Windows.Forms.DataSourceUpdateMode.OnPropertyChanged) End Sub Private Sub BindingReverseBoolean_Format(ByVal sender As Object, ByVal e As System.Windows.Forms.ConvertEventArgs) Handles Me.Format e.Value = Not e.Value End Sub Private Sub BindingReverseBoolean_Parse(ByVal sender As Object, ByVal e As System.Windows.Forms.ConvertEventArgs) Handles Me.Parse e.Value = Not e.Value End Sub End Class で、FormのLoadでこんな感じに使います。 myCheckBox.DataBindings.Add(New BindingReverseBoolean("Checked", mySplitContainer, "Panel2Collapsed")) どうもバインディングオブジェクトは [Checked]⇒True=Format=False⇒[Collapsed]⇒False=Parse=True⇒[Checked] こういう感じに動くようだ。2回値がセットされる感じ。 今回は自分で使うだけで、絶対にBoolean以外がこないのはわかっているのでエラー処理はなし。 余裕があれば汎用的なクラスにしたいので、プロパティの型チェックとかいれる予定。 配列をリストに変換する 2007/11/18 リストを配列に変換するのはToArrayで簡単。配列をリストに変換する方法がわからない・・・3時間ぐらい調べてやっと見つけた。 http //d.hatena.ne.jp/Seasons/searchdiary?word=*%5BC%23%5D わかってみれば簡単でリストのコンストラクタに渡せばよいだけでした・・・ Dim myArray As String() = {"A","B","C"} Dim myList As List(Of String) = New List(Of String)(myArray) 固定値の入ったリストを作るときもこのほうがラク。 つか、ちょっとデキる人は絶対わかってるよな。「リストを配列に変換する」で検索してどうにもひっかからないっていうのは何故。 型比較でハマる 2007/11/18 オブジェクトのプロパティを列挙する処理を書いていたら、PropertyTypeの型のチェックで エラー5型 'System.Type' の式を型 'String' にすることはできません。 のエラーが出て、いろいろ書き換えてみてもどうにも通らない。 原因は「型の比較はTypeOfだ」という思い込みでした。 For Each pi As PropertyInfo In target.GetType.GetProperties Select Case True Case TypeOf pi.PropertyType Is String ←ここがダメ ... Case Else ... End Select Next ↓ For Each pi As PropertyInfo In target.GetType.GetProperties Select Case True Case pi.PropertyType Is GetType(System.Byte) ←これでOK ... Case Else ... End Select Next TypeOfはオブジェクトと型を比較するのね。型どうしの直接比較ならIsだけでよい。 気づかなかったのが恥ずかしい・・・。 NewGUIDを文字列にするときの引数 2007/11/10 よくわからなくなるのでメモ。xは16進数なので[0-9A-F]。 GUID.NewGUID.ToString("N") xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 32桁 GUID.NewGUID.ToString("D") xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ハイフンで区切られた 32 桁 GUID.NewGUID.ToString("B") {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 中かっこで囲まれ、ハイフンで区切られた 32 桁 GUID.NewGUID.ToString("P") (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) 丸かっこで囲まれ、ハイフンで区切られた 32 桁 My.Settingsに連結したコントロール間でChangedイベントで値をやり取りすると値が書き戻されることがある 2007/11/08 実際に起こったのはチェックボックスのChackedChangedでテキストボックスに値を書き込んだら、チェックボックスの値が再度My.Settingから読み出されて変更する前に戻ってしまう。 検索したらMy.Settingsの挙動不審がいくつか見つかるので、バインドしたコントロール間でやり取りはしないほうが無難。 2007/11/15 Microsoftにも正式文書がありました。 http //msdn2.microsoft.com/ja-jp/library/a65txexh(VS.80).aspx 現在、Windows フォームの一部のプロパティはバインドできません。わかりやすい例は ClientSize プロパティです。 このプロパティにバインディングすると、実行時に予期できない動作が発生します。 通常、設定をプログラムで保存して読み込むことでこの問題を解決できます。 DataSet中の複数のテーブルをAccessのように連結して扱う 2007/10/26 アクセスがクエリを元にフォームをつくれるので、同じことがVB.netでもできないかなと探していたら、DataTable間にリレーションを設定し、DataColumnのExpressionを設定することで実現できました。 Private relationTest As System.Data.DataRelation Me.relationTest = New System.Data.DataRelation( _ "relationTest", New System.Data.DataColumn() {Me.tableA.ShohinCDColumn}, _ New System.Data.DataColumn() {Me.tableB.ShohinCDColumn}, _ false) Me.Relations.Add(Me.relationTest) Me.tableA.ShohinNameColumn.Expression = "Parent(rerarionTest).ShohinName" DataGridViewの列で処理することばかり考えていて、DataTableそのものに列を追加するというのは、ちょっと思いつかなかったな。 いままでコードに対応する名称をDataGridView上で表示するのにわざわざコンボボックスを使っていたので、これでとてもラクになりました。 DataTableはアクセスのクエリの役目も果たしてくれるのですね。 ちなみにここにはコードで載せていますが、これはDataSetのDesiner.vbから拾ってきたもので、実際にはデザイナオンリー、ノンコーディングで実現できています。 継承コントロールをデザイナで削除すると「インデックスが範囲を超えています」のエラー 2007/10/10 検索語:コンストラクタ Newの中でAddHandlerしたテキストボックスの継承コントロールで、デザイナで削除するときに インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。 パラメータ名 index のエラーメッセージが出るようになってしまった。いろいろ調査した結果、原因はAddHandlerだと判明。 AddHandler DataBindings.CollectionChanged, AddressOf DataBindings_CollectionChanged 最終的にはDisposeの中でRemoveHandlerを書くことで解決。 RemoveHandler DataBindings.CollectionChanged, AddressOf DataBindings_CollectionChanged 似たようなことをやっている他の継承コントロールでは起きないので、解放するリソースの種類や内部処理に依存しそう。 まあ「Disposeするときにきちんとすべてのリソースを解放しましょう」というのは当たり前のことだから、いままでAddHandlerの後始末をやっていなかったのがダメなんでしょう。たぶん。 「AddHandlerしたら必ずRemoveHandlerしましょう」とか、教えてくれる人もいなかったし、どこかに書いてあるのかなぁ。 継承したテキストボックスをフォームから削除しようとすると、エラーが出て削除されない。 2007/08/27 インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。 プロジェクトを開きなおすときちんと消えている。 継承したコントロールの中でやっている処理の問題だった。詳細な内容は後でかこう。 ComboBoxに連結したDataTableが意図せずに変更される 2007/10/04 検索語:コンボボックス/DataTable/DataView/DataSource/Bind/データが変わる DataTableにコンボボックスを連結したときに、既存データにコンボボックスに存在しない値が入っていると、レコードのCurrent時にコンボボックスの先頭の値に書き換えられてしまう。 FormattingEnabled をTrueにすることで解消できる。FormatString を設定する必要はない。 Express Edition ではセットアップ用のmsiはつくれない 2007/08/07 確実な情報が見つからないけど、つくれないっぽい。 ↓こういうの見つけた。んー、個人でここまで踏み込むかどうするか。会社でやる分にはVS.net使えるからなぁ。 WiXではじめるWindows Installer作成入門 ComboBoxにはDoubleClickイベントがないのね 2007/08/24 コンボボックスでDoubleClickイベントを使おうかと思ったらありませんでした。 CSVの読み込み 日本語の露出が少ないけどXmlCsvReaderというのがよさそう。テストしてみよう。 相手先別に添付ファイルを変更するメール送信ソフトを作ってみよう 2007/07/26 VB.netでメール送信するのは簡単そう。相手のアドレスと添付ファイルのリストから、メール送信するソフトを作ってみよう。 http //www.atmarkit.co.jp/fdotnet/dotnettips/017sendmail/sendmail.html ↑このアドレスは2003で、2005からはクラスが変わっていました。 http //www.microsoft.com/japan/msdn/vbasic/migration/tips/netmail/ 2007/07/28 うーん、SmtpClient はいろいろ問題がありそうな。POP before SMTPとかも自作しなきゃいかんし。 http //support.microsoft.com/default.aspx/KB/927858 2007/07/28 商用利用も含めてフリーライセンスのよさそうなライブラリを発見。 .NET用メール送受信クラスライブラリ (TKMP.DLL) ライセンスについて http //uwa.potetihouse.com/bbs/patio.cgi?mode=view no=139 自分で組めるようにもなりたいけど、とりあえず利用させていただいて、少しづつ力をつけよう。 コンボボックスに高速にデータをBindする 2007/07/24 DataSourceよりもValueMemberとDisplayMemeberを先に指定したほうが速いようです。 設定するたびにリクエリがかかる感じですね。 特に件数の多いテーブルをBindするときに効果的です。 DataSourceを先に設定した場合 DebugTimer.WriteLine("Testスタート") cboSample.DataSource = New DataView(dt) ←先に設定 DebugTimer.WriteLine("DataSourceをセット") cboSample.ValueMember = "連結したい列名" DebugTimer.WriteLine("ValueMemberをセット") cboSample.DisplayMember = "表示したい列名" DebugTimer.WriteLine("DisplayMemberをセット") MEMO 00 00 000 00 00 000 Testスタート MEMO 00 00 272 00 00 272 DataSourceをセット MEMO 00 00 540 00 00 268 ValueMemberをセット MEMO 00 00 808 00 00 268 DisplayMemberをセット DataSourceを後に設定した場合 DebugTimer.WriteLine("Testスタート") cboSample.ValueMember = "連結したい列名" DebugTimer.WriteLine("ValueMemberをセット") cboSample.DisplayMember = "表示したい列名" DebugTimer.WriteLine("DisplayMemberをセット") cboSample.DataSource = New DataView(dt) ←後に設定 DebugTimer.WriteLine("DataSourceをセット") MEMO 00 00 000 00 00 000 Testスタート MEMO 00 00 000 00 00 000 ValueMemberをセット MEMO 00 00 000 00 00 000 DisplayMemberをセット MEMO 00 00 296 00 00 296 DataSourceをセット Microsoft Win32 と Microsoft .NET Framework API との対応 2007/07/16 http //www.microsoft.com/japan/msdn/net/general/win32map.aspx 2005でデザイナから自動生成されるDataTableでのDBNull 2007/07/16 XというフィールドにDBNullが来るよねと思ってIsDBNull(X)で判定しようとしたら蹴られた。 なんで?と思ってクラスを見たら、テーブルのメソッドにIsXNullっていうのが作られてた。 なるほど。Nullの可能性のあるフィールドはこれで判断しろと。 タイマーとメッセージボックス 2007/07/16 メッセージボックスが出ているあいだもタイマーは動き続けているので、処理によっては固まる。注意。 ワークステーションのロック 2007/07/16 カンタンだった。 System.Diagnostics.Process.Start("rundll32.exe", "user32.dll,LockWorkStation") 2007/07/16 ロックかけるのは簡単だけど、ロックされているかどうかの判断が難しい。つか標準ではできない。 http //rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200612/06120018.txt Microsoft.Win32.SystemEventsのSessionSwitchを使うことで、 ロック開始のイベントとロック終了のイベントを受け取ることができます。 との情報を発見したので、ロック状態を管理しつつ、ロックをかけてくれるクラスを作成。 → WorkStationLockController 念のためsingletonをとっておく。singletonについては → http //hccweb1.bai.ne.jp/tsune-1/VisualBasic/singleton.html ちなみにsingletonをグローバル変数的に使うのはよくないというのは心しておく。 ワークステーションのロックについて調べていたら突き当たったサイト → http //www7a.biglobe.ne.jp/~lshen/EternalWindows/ GINAとか珍しいあたりをわかりやすく書いてくれてる。 フォアグラウンドウインドウを判定するのってAPI使うしかないのかなぁ。 → http //iseebi.half-done.net/?TechDoc%2FDetectionFullscreen LDAPとActive Directoryの要素の比較 2007/07/13 参考 http //publib.boulder.ibm.com/tividd/td/ITAME/SC32-1358-00/ja_JA/HTML/am51_webseal_devref101.htm 最大長 LDAP Active Directory 名 (LDAP CN) 256 64 ミドル・ネーム 128 64 姓 128 64 レジストリー UID (LDAP DN) 1024 2048 ユーザー・パスワード 制限無し 256 ユーザー記述 1024 1024 グループ名 256 グループ記述 1024 1024 シングル・サインオン・リソース名 240 256 シングル・サインオン・リソース記述 1024 1024 シングル・サインオン・ユーザー ID 240 256 シングル・サインオン・パスワード 制限無し 256 シングル・サインオン・グループ名 240 256 シングル・サインオン・グループ記述 1024 1024 アクション名 1 1 アクション記述、アクション・タイプ 制限無し 制限無し オブジェクト名、オブジェクト・スペース名、ACL 名、POP 名 制限無し 制限無し オブジェクト記述、オブジェクト・スペース記述、ACL 記述、POP 記述 制限無し 制限無し DirectorySearcher手ごわい 2007/07/13 http //www.microsoft.com/japan/msdn/community/gdn/ShowPost-33574.htm グループとユーザーの階層をノード的に取得しようとしたけど、手ごわい。 なんだよMemberofプロパティとかPrimaryGroupが取れないとか。 Microsoftのヘルプじゃまったくダメで、LDAPの仕様とか理解しないといけないところがツラい・・・ System.DirectoryServices.DirectoryEntry.SchemaClassNameの一覧 2007/07/12 ※とりあえず私が使ったものをメモっていきます。 ユーザー User グループ Group コンピュータ Computer サービス Service 検索をかけても一覧が見つからない・・・誰か教えて。 SelectCommandでデータ書き込むストアド指定するとコミットされない・・・んー 2007/07/10 DataAdapterのSelectCommandにデータの更新ありのストアドを投げると、戻ってきた結果は正しいのにデータベースには反映されてないみたい。 んー、いちいちコミットいれなきゃダメ? →mdfファイルが毎回コピーされてしまうためでした。 http //www.atmarkit.co.jp/fdotnet/dotnettips/532dbfilecopy/dbfilecopy.html 2005のヘルプにCrystal Reportのヘルプを追加とか 2007/07/09 http //salv.miscnotes.com/2005/01/tips5_vsnethelphelp.php TreeView使ってみた 2007/07/04 便利。同じTreeNodeオブジェクトを別のツリーに追加することはできなかった。 アップキャストとダウンキャスト 2007/06/14 アップキャスト 派生クラス→基本クラス 常にOK ダウンキャスト 基本クラス→派生クラス やらないほうがよい。できないこともある。 ダウンキャストについてはちょっと勉強したほうがよさそうだ。 IIFとdecimalでハマる 2007/06/12 DataTable.ColumnのExpressionを使用していて、floatだったフィールドをdecimalに変更したら何故か0除算のエラー。 IIF([分母]=0,0,[分子]/[分母]) とやって0除算をしてないはずなのに・・・・・・と半日ハマる。結論は IIFは真も偽も計算してから値を返すから IIFは普段は危険だから使わないんだけど、floatのときにエラーにならなかったので見落としました。 floatは0除算でエラーを返さないのね。 でもExpressionの中ってIIFしか条件式が使えない。やむをえず [分子]/CAST([分母],'System.Double') として回避。 GrapeCity FlexGrid for .NET 2.0J ダメだこれ。もうイヤ。 何がダメって、ColumnオブジェクトのNameプロパティが連結先のDataTableの列名。 で、複数のColumnに同じNameが設定できる。だからIndex以外で列を特定する術がない。 なのに、列位置を移動するとIndexが変わる。 頼むからNameは固有値にしてMappingName を指定させてくれ。 誰だこんなコントロール使うことにしたのは。二度と使わない。 いや、最新は4.0Jだから、よくなってるのかもしれないけれど。 VB.Netに関する資料 2007/04/22 オブジェクト倶楽部 http //www.objectclub.jp/ ここのトレーニングテキストが死ぬほど役立つ。入門用とリファレンスのちょうど中間あたりの本になりにくいあたりが解説されている。 2007/05/13 ちょっと見ようと思ったら見つけられない。C#のページにありました。 http //www.objectclub.jp/technicaldoc/c/training.pdf 2007/04/29 .NETでの正規表現の使用法 http //japan.internet.com/column/developer/20050822/28.html 2007/05/01 コンテキストメニューまわり http //vbdotnet.fc2web.com/vbnet/control/ContextMenuMenu.htm ArrayListとList 2007/04/22 自作クラスのコレクションを作れるに違いないと思って、ArrayListを調べて2時間。 どうしても型指定したコレクションがつくれないよー(。´Д⊂) と、泣きそうになったところでListに気がつく。 あまりにも最初にArrayListに慣れ親しんだために、それ以外思い浮かばなかった失敗。 2007/05/24 Listって.net 2005(Framework 2.0)からなので。自宅は2005、会社は2003なので、会社で使おうとして使えなくてがっかり。 プロパティにオブジェクトを設定したときにNewのタイミング 2007/04/22 プロパティ用のローカル変数に Private _objectname As Objecttype と宣言していてハマる。 Private _objectname As New Objecttype きちんとインスタンス意識しないとね。 自分自身と同じ型のコレクションをプロパティに持つ Private _childnodes As New List(Of LogNode) Public Property ChildNodes() As List(Of LogNode) Get Return _childnodes End Get Set(ByVal value As List(Of LogNode)) _childnodes = value End Set End Property 2007/04/22 とりあえず2日間ざっくり勉強して2日間ざくざく組んだら、少し勘が働いてきた。 言語って、あるレベルまでいかないと、目の前が開けないよね。一回開けてくると調査スピードも速くなる。 DateTimeメモ 2007/04/27 DateTimeの中身は#1/1/0 00 00 00#(西暦0年1月1日)からの経過ミリ秒 javascriptと値がずれるなと思ったら、javascriptは#1970/01/01 00 00 00#からの経過ミリ秒でした。 で、それでも誤差が32400ミリ秒出るので何かと思ったら、32400/60/60=9、ということで標準時との差。 再帰型のクラスでちょっとはまったこと クラスを通過するたびにカウントアップするような引数は参照渡しすること。 ライブラリメモ ファイルパスの分解 System.Io.Path ディレクトリ名はディレクトリを指定すればFileNameで取得できる .GetExtension 戻り値はピリオド付き ファイルの検索 System.Io.Directory 戻り値はString() ファイル情報 My.Computer.FileSystem.GetFileInfo .Length ファイルサイズの単位はバイト 正規表現 System.Text.RegularExpressions Regex.Match(Path.GetFileNameWithoutExtension(file), "^\d{1,5}$").ToString 後方参照で置換 .Replace(対象文字列," a href="http //~" (.*?) /a ","$1") ファイル名に使えない文字を置換 mystring=Regex.Replace(mystring, "[\\\/ ,;*?"" |]", "_") 文字コード System.Text.Encoding.GetEncoding("SHIFT-JIS") LinkLabel なんかハイパーリンクを使いたかったのでざくっと調べたらLinkLabelっていうコントロールがある。 テキストいれればクリックで勝手にブラウザ呼んでくれるのかと思ったら、呼び出しも書かなきゃいけないし、訪問済みかどうかも自分で設定しなきゃいけないみたい。不便。自分で変更できるのはありがたいとして、最初からブラウザと同期してくれてもいいと思うんだけど、なんでだろう。 まあ複数リンクも扱えるけど、もっとこう、さくっと。 ハッシュテーブル 2007/05/16 Addは使わなくても良い。 指定したキーがハッシュテーブルに存在しない場合には、新しい要素として登録される。 キーがすでに存在する場合には、インデクサではそのキーに対応する値が置き換えられるが、Addメソッドでは例外が発生する。 With Nothingを使って変数を局所化 2007/05/16 http //blogs.wankuma.com/jeanne/archive/2006/11/07/43926.aspx Sub Hoge With Nothing dim i as integer 処理 End With With Nothing dim i as integer 処理 End With End Sub みたいな形で変数のスコープを短くして使いまわせるという話。 共有メンバ 2007/05/17 ヘルプより 既定では、クラスのデータはクラスの各インスタンスに固有になります。ただし、1 つのクラスから作成したすべてのオブジェクト間で、1 つのデータ項目を共有する方が都合のよい場合もあります。このような場合には、Shared 修飾子を使用して、変数の同じ値をクラス内のすべてのインスタンスで共有できるようにします (共有メンバは、他のプログラミング言語では "静的メンバ" と呼ばれる場合もあります)。共有メソッドは、事前にクラスのインスタンスを作成しなくても、クラス名を使用して直接呼び出すことができます 参考:http //blogs.wankuma.com/torikobito/archive/2007/04/04/70121.aspx よくつかうリンク 2007/05/29 Visual Studio User Group comment このページの記述で聞きたいこととか間違ってることとかありましたらコメントを。 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/jennychan/pages/9.html
.NET Framework固有のTipsです。 アプリケーションの設定値 アプリケーション/ユーザごとの設定を簡単に扱える。 マイクロソフト情報(C# で設定を使用する) 要約 ugingに、「System.Configuration」を追加 using System.Configuration; プロジェクトの設定(ソリューションエクスプローラで、プロジェクトを右クリック→プロパティ→設定タブクリック)で、設定値のプロパティを作成する。この時に既定値も指定できる。 データの取得は、Properties.Settings.Default.プロパティ名 string s = Properties.Settings.Default.test1; データの保存は、 Properties.Settings.Default.test1 = "hoge"; Properties.Settings.Default.Save(); ※Saveメソッドを実行しないと保存されない。 設定ファイルの位置は、「Documents and Settings\ ユーザ名 \Local Settings\Application Data\ 会社名 \ アセンブリ名_ハッシュ値 \ アセンブリバージョン \user.config」となるが、会社名を指定しなかった場合は、アセンブリ名が使われる。 DBアクセス(ADO.NET 2.0) 様々なデータベースに対し、統一的に処理を行うために、冗長な手順を踏む必要がある。そのため、どうしても、とっつきにくい構造になってしまっている。 ただし、JDBCも同じような構造のプログラムになっているので、一つ覚えてしまえば、つぶしがが効くとも言える。 接続情報などは、コードに直接記述するのではなく、アプリケーションの設定値を利用するのが望ましい。 小規模なデータで、リレーションを行わないような場合は、DBを使うよりも、XMLを使用して、XPathで検索したほうが手軽な気がする。 使用するクラス DbProviderFactories システムに登録されているDbProviderFactoryインスタンスを管理しているクラス DbProviderFactory プロバイダ情報を格納し、下記クラスのインスタンスを作成するためのクラス JDBCのjava.sql.DriverManagerみないなもの?? DbConnection データベースへの接続状態を表すクラス DbProviderFactoryから取得する JDBCのjava.sql.Connectionに相当する DbCommand DBに対して実行する命令(SQL文など)を表すクラス DbProviderFactoryから取得する JDBCのjava.sql.PreparedStatementに相当する DbDataReader DBに対する問い合わせ結果を表すクラス DbCommand.ExceuteQueryから取得する JDBCのjava.sql.ResultSetに相当する DbDataAdapter DBに対する命令、接続、結果データの格納を表すクラス DbCommandとDataSetの橋渡し役 DataSet メモリ上に展開された、データを階層的に管理するクラス DBの問い合わせ結果などのデータを格納(データはDbDataAdapterから得られる)し、問い合わせ処理に問題が無ければ、1つ以上のDataTableクラスオブジェクトを持つ事になる なお、問い合わせ結果が1万行あれば、1万行分のデータをメモリに展開する DataTable 一つのテーブルに対するデータを格納するクラス DataColumn 列情報を格納するクラス DataColumnCollection テーブル内の全ての列情報を格納するクラス DataColumnのコレクション DataRow 行情報を格納するクラス DataRowCollection テーブル内の全ての行情報を格納するクラス DataRowのコレクション 流れ(問い合わせの場合) // DbProviderFactoryのインスタンスを作成 DbProviderFactory dbProvider = DbProviderFactories.GetFactory("System.Data.OleDb"); // DbProviderFactoryのインスタンスからDbConnectionを取得 DbConnection dbCon = dbProvider.CreateConnection(); // DbConnectionに、ConnectionStringを設定し、Openする // DBファイルはtest.mdb(Microsoft Access MDB) dbCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=test.mdb"; dbCon.Open(); // この時点で、DBとの接続が完了 // DbProviderFactoryのインスタンスからDbCommandを取得 DbCommand dbCmd = dbProvider.CreateCommand(); // DbCommandに、接続情報(DbConnection)をセット dbCmd.Connection = dbCon; // DbCommandに、問い合わせ文をセット(サンプルなので適当なselect文) dbCmd.CommandText = "select * from foo"; // DbDataAdapterを取得 DbDataAdapter dbAdap = dbProvider.CreateDataAdapter(); // DbDataAdapterに、DbCommandを結びつける dbAdap.SelectCommand = dbCmd; // 問い合わせ結果を受け取るための、DataSetクラスのインスタンスを作成する DataSet ds = new DataSet(); // 問い合わせ結果を取得する dbAdap.Fill(ds); // DataSetは複数のテーブルに対するデータが保存できるので、 // 1つ以上のテーブルデータが保存されているか確認する if (ds.Tables.Count 0) { // 最初のテーブル情報を利用する DataTable dt = ds.Tables[0]; // 問い合わせ結果が1行以上存在するか確認する DataRowCollection rows = dt.Rows; if (rows.Count 0) { // 問い合わせ結果の最初の行の、最初の列の値を出力する System.Console.WriteLine(rows[0][0]); // 問い合わせ結果の最初の行の、列名が「FIELD1」の列の値を出力する System.Console.WriteLine(rows[0]["FIELD1"]); } } // 接続を切断する dbCon.Close(); ということらしい… DataSetとDbDataReader DataSetは、全ての問い合わせ結果をメモリ上にコレクション的に格納する DbDataReaderは、データベースのカーソル的な動作を行う 上記のDataSetを使用した問い合わせ処理 // DbCommandに、問い合わせ文をセット(サンプルなので適当なselect文) dbCmd.CommandText = "select * from foo"; // DbDataAdapterを取得 DbDataAdapter dbAdap = dbProvider.CreateDataAdapter(); // DbDataAdapterに、DbCommandを結びつける dbAdap.SelectCommand = dbCmd; // 問い合わせ結果を受け取るための、DataSetクラスのインスタンスを作成する DataSet ds = new DataSet(); // 問い合わせ結果を取得する dbAdap.Fill(ds); をDbDataReaderを使用すると // DbCommandに、問い合わせ文をセット(サンプルなので適当なselect文) dbCmd.CommandText = "select * from foo"; // 問い合わせ結果を取得する DbDataReader dbReader = cmd.ExecuteReader(); // 一行ずつ処理を行う do { while (dbReader.Read()) { // 列情報を取得する // 列名では取得できない? // 実際の型と異なる形式で取得できない? int f1 = dbReader.GetInt32(0); string f2 = dbReader.GetString(1); string f3 = dbReader.GetString(2); ・・・ } } while (dbReader.NextResult()); // DbDataReaderを使い終わったらCloseする dbReader.Close(); となる。 挿入、更新、削除などのNonQuery処理 DbCommand.ExceuteNonQueryでSQL文の実行が行える。 // DbCommandに、実行したいSQL文をセット(サンプルなので適当なupdate文) dbCmd.CommandText = "update foo set update= 2007-01-02 where id=1"; // SQL文の実行 cmd.ExecuteNonQuery(); パラメータ化されたSQL文 java.sql.PreparedStatementの様に、SQL文中でパラメータを使用する事が可能となる。 // DbCommandに、実行したいSQL文をセット(サンプルなので適当なupdate文) // パラメータマーカーは、DBに依存するそうだが、OLE DBでも、@idの様な記述で問題なく動く dbCmd.CommandText = "update foo set update=@update where id=@id"; // パラメータの情報を設定 // DBに依存しないコードは記述できない??? // OLD DBの場合、パラメータを名前で判断していないので、 // パラメータの出現順とAddメソッドが同期していなければいけない // また、実際のパラメータ名と異なる名前を使用してもエラーにならず、正しく処理される dbCmd.Parameters.Add(new OleDbParameter("@update", OleDbType.Date)); dbCmd.Parameters.Add(new OleDbParameter("@id", OleDbType.Numeric)); // パラメータに値を設定 // dbCmd.Parameters[0].Value = 2007-01-02 としてもよいが、パラメータ名を使用して値を設定できる dbCmd.Parameters["@update"].Value = 2007-01-02 ; dbCmd.Parameters["@id"].Value = 1; // SQL文の実行 cmd.ExecuteNonQuery(); ADO.NET 2.0でOLE DB、Oracle、SqlServerなど、個々のDBに依存したクラスを使用せずに、DbXxxxクラスでコードが記述できると言っているが、パラメータの型指定などでは、使用するDBに依存するコードとなってしまうらしい。 また、複数の行に対する処理の場合、 // DbCommandに、実行したいSQL文をセット(サンプルなので適当なupdate文) dbCmd.CommandText = "update foo set update=@update where id=@id"; // パラメータの情報を設定 dbCmd.Parameters.Add(new OleDbParameter("@update", OleDbType.Date)); dbCmd.Parameters.Add(new OleDbParameter("@id", OleDbType.Numeric)); // パラメータに値を設定 dbCmd.Parameters["@update"].Value = 2007-01-02 ; dbCmd.Parameters["@id"].Value = 1; // SQL文の実行 cmd.ExecuteNonQuery(); // 次の処理のためのパラメータに値を設定 // 直前の処理と同じSQL文であれば、パラメータ情報を設定しなおす必要は無い dbCmd.Parameters["@update"].Value = DateTime.Now; dbCmd.Parameters["@id"].Value = 2; // SQL文の実行 cmd.ExecuteNonQuery(); とすることも出来る 日付型のパラメータと定義してあれば、DataTime型のデータを設定しても大丈夫らしい。 DataGridView .NET Framework version 2.0から、DataGridコントロールに代わるコントロールとして追加されたもので、DataSourceにデータオブジェクトを指定し、データの表示、編集作業を行う。 DataSourceには、 Visual StudioのGUI操作で作成したデータソースオブジェクト DataSetオブジェクト DataTableオブジェクト が使われる。 データの参照であれば、Visual StudioのGUI操作(データソース構成ウィザード)だけで大抵の処理が実現できてしまう。 Microsoftとしては、データの編集作業も含めて、Visual StudioのGUI操作だけで出来ると主張しているが、一般的なアプリケーションであれば、データの追加、修正作業を行う際には、データの内容、更新確認などの確認処理を経てから実際に更新処理を行うはずなのだが、これらのUI処理まで面倒見てはくれていない。 DataGridViewのDataSourceにDataSetを指定する際には、DataSet内に一つしかテーブルが存在しない状態であっても、「どのテーブルを表示させるのか」という指定が必要になる。 // DataGridViewに表示したいテーブル名 string sMemberName = "foo"; // 問い合わせ結果を受け取るための、DataSetクラスのインスタンスを作成する DataSet ds = new DataSet(); // 問い合わせ結果を取得する dbAdap.Fill(ds, sMemberName); // 対象となるテーブルオブジェクトの存在確認 if (ds.Tables.IndexOf(sMemberName) = 0) { // DataGridViewのDataSourceとDataSetを結びつける dataGridView1.DataSource = ds; // DataMemberプロパティが設定されていないと表示されない dataGridView1.DataMember = sMemberName; } DataGridViewのDataSourceにDataTableを指定する場合は、 // DataGridViewに表示したいテーブル名 string sMemberName = "foo"; // 問い合わせ結果を受け取るための、DataSetクラスのインスタンスを作成する DataSet ds = new DataSet(); // 問い合わせ結果を取得する dbAdap.Fill(ds, sMemberName); // 対象となるテーブルオブジェクトの存在確認 if (ds.Tables.IndexOf(sMemberName) = 0) { // DataGridViewのDataSourceとDataTableを結びつける dataGridView1.DataSource = ds.Tables[sMemberName]; } となる。 さらに、DataAdapterのFillメソッドには、DataTableを指定できるので // 問い合わせ結果を受け取るための、DataTableクラスのインスタンスを作成する DataTable dt = new DataTable(); // 問い合わせ結果を取得する dbAdap.Fill(dt); // DataGridViewのDataSourceとDataTableを結びつける dataGridView1.DataSource = dt; と出来る。 データソース Visual Studio プロジェクトのデータソースとは、アプリケーションから利用可能な データベース オブジェクト Webサービス などのデータを指し、型指定されたDataSetとTableAdapterが用意される。 型指定されたDataSetを使用すると、 ds.Tables["foo"].rows[0]["FIELD1"]; と記述していたコードが ds.foo[0].FIELD1; となる。 フィールド値のNULLチェック(DBNull判定)は、「Is + 列名 + Null」形式のメソッドで判定する。 if ( !ds.foo[0].IsFIELD1Null() ) f1 = ds.foo[0].FIELD1; コレクションのキー部分がプロパティ化されるわけだが、プロパティ化されたということは、単なるObject型データの連想配列として管理していた従来のDataSetと異なり、型が定義されているので、数値列に対して文字列を指定した様な場合、コンパイル時にエラーが出るのでコードの信頼性が高まる。 TableAdapterは、DataAdapterに型指定を追加したバージョン。 このTableAdapterオブジェクトには、挿入、削除、更新、問い合わせなどの機能をGUI操作により作成できる。 パラメータ付クエリは、「TableAdapter クエリの構成ウィザード」を使用して対話的に作成する事が出来、「クエリ ビルダ」ダイアログの「フィルタ」セルにパラメータを指定することで、=条件だけでなく、like条件なども定義できるが、パラメータ名については、使用するDBに依存したものになる。 MSDNのドキュメントを始め、大抵のサンプルでは、フィルタ名として「@param」などの、「@」を冠した名前が使われているが、これは、SQL Serverのパラメータマーカーで、OLE DBの場合は、「?」以外はパラメータとして認識されない。 DbCommandクラスでも、パラメータマーカーはDB依存度が低くなっているのに、TableAdapterでは、DB依存度が高い。 また、DataGridViewとデータソースを結び付けている場合、既定の処理では、FormLoadのイベント処理にデータソースからデータを取得するコードが自動的に追加されるのだが、データソースが存在していない場合、当然、例外が発生する。 自動的に追加されるコードは、try~catchで囲まれた形で追加されるわけでもなく、また、接続文字列変更や、再接続のためのサポートメソッドも見当たらない。 接続文字列プロパティは、読み取り専用なので直接XMLファイルを書き換えないと変更できないらしい。開発環境と、実稼働環境の接続設定が異なる場合に面倒な事になる。 まともなプロジェクトでは、開発時には実稼働環境を使うことはしないと思うので、この点の使い勝手は悪いとしか言いようが無いが、TableAdapterインスタンスのConnectionプロパティのConnectionStringを再設定するとうまく動いてくれるので、アプリケーションの最初で、接続文字列を設定するコードを記述しろという事か? データベース作成 ADOX.CatalogClassを使用する事でデータベースを作成できるらしい。 ただし、データベースによっては作成できないものもあると思われる。 ADOX namespaceは、「Microsoft ADO Ext. 2.x for DDL and Security」に含まれているらしい。 ADOX.CatalogClassクラスのCreateメソッドの引数に、データベースへの接続文字列を指定することで作成する。 string sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=test.mdb"; ADOX.CatalogClass cat = new ADOX.CatalogClass(); cat.Create(sConnectionString ); XML 従来からInternet Explorerの一部として配布されていたMSXMLがあったが、.NET FrameworkのXMLクラスは、様々な点で使い勝手が良くなっている。 C言語から使用する場合、文字列をBSTRなどの形にしないといけなかったが、C#言語の場合は、メモリ管理は自動だし、始めからUnicode対応なので、そのまま扱える 何も指定しなくても、改行やインデントされた状態でファイルへ出力できる ほぼCOMインターフェース直接アクセスに近いMSXMLと違い、自動でメモリ管理をしてくれるので、Nodeの参照カウンタ管理などを気にせずに使える など ところで、.NET FrameworkのXMLクラスは、ファイルの先頭がXML宣言( ?xml…)でないとエラーになるらしい。コメントであっても。 MS-XMLでは問題なかったのだが…。 また、二つのXMLオブジェクトの結合を行う場合、自身の子ノードでないノードをAppendChildなどで追加させる事になるのだが、自分がCreateしたノード以外のノードを追加する事が出来ないので、ImportNodeメソッドでコピーを作成した後にノードを追加する。 XmlDocument doc1 = new XmlDocument(); XmlDocument doc2 = new XmlDocument(); doc1.Load("test1.xml"); doc2.Load("test2.xml"); XmlNodeList lst = doc1.SelectNodes("/foo/*"); XmlNode parent = doc2.SelectSingleNode("/foo"); foreach (XmlNode node in lst) { parent.AppendChild(doc2.ImportNode(node, true)); } LINQ LINQ(Language Integrated Query 統合言語クエリ)とは、.Net Framework 3.5から導入された、プログラム言語に統合されたクエリ機能。 一般的な問い合わせであれば、LINQだけで記述できるらしいので、複数のデータベースシステムへの対応が容易になる(可能性がある)。 また、プログラム言語の構文の一つと言う事から、表の列と、変数の比較処理も記述できる。 今までは、存在しない表、列を使用したSQL文を記述しても、実行時エラーが発生することはあっても、コンパイルエラーが発生することは無かった。 しかし、プログラム言語に統合される事により、存在しない表、列を指定した問い合わせ処理に対して、コンパイル時にエラーを検出する事が可能となる。 また、型指定されたDataSetと同様、列の型も管理しているので、数値列に対して文字列との比較、代入を行うような処理に対してもコンパイルエラーが発生する。 マイクロソフトのサイトでは、DataContextの作成は // DataContext で接続文字列を取得します。 DataContext db = new DataContext("c \\northwind\\northwnd.mdf"); と記述されているが、これは、SQL Serverでしか有効ではない。 つまり、AccessのMDBファイルを使用したいときなどは、この様な記述では例外が発生し正しく動作しない。 SQL Server以外のDBに対してDataContextを作成する場合は、IDbConnectionを引数にしたコンストラクタを使用することで可能となる。 // DbProviderFactoryのインスタンスを作成 DbProviderFactory dbProvider = DbProviderFactories.GetFactory ("System.Data.OleDb"); // DbProviderFactoryのインスタンスからDbConnectionを取得 DbConnection dbCon = dbProvider.CreateConnection(); // DbConnectionに、ConnectionStringを設定し、Openする // DBファイルはtest.mdb(Microsoft Access MDB) dbCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=test.mdb"; // DbConnectionのオブジェクトから、DataContextを作成する DataContext db = new DataContext(dbCon); ※こんな面倒な事をしなくても、 // 接続文字列 string sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=test.mdb"; // System.Data.OleDb.OleDbConnectionのインスタンスを作成 DbConnection dbCon = new System.Data.OleDb.OleDbConnection(sCon); // DbConnectionのオブジェクトから、DataContextを作成する DataContext db = new DataContext(dbCon); で出来る。 LINQは、.Net Frameworkで扱えるオブジェクトに対する「汎用クエリ機能」なので、データベースやXML以外にも適用できる。 たとえば、以下の様なちょっと複雑なソート処理は private static int Compare(int x, int y) { int result = (x % 3) - (y % 3); if (result == 0) { result = y - x; } return result; } private void Test() { int[] numbers = { 1, 3, 5, 7, 9, 2, 4, 6, 8 }; Array.Sort(numbers, Compare); foreach (var i in numbers) { Console.Write("{0} ", i); } Console.WriteLine(); } LINQを使うと private void Test() { int[] numbers = { 1, 3, 5, 7, 9, 2, 4, 6, 8 }; foreach (var i in numbers.OrderBy(i = i % 3).ThenByDescending(i = i)) { Console.Write("{0} ", i); } Console.WriteLine(); } と記述できる。 ただし、LINQはあくまでも「クエリ」処理を行うものなので、Array.Sortメソッドの様に、データソース自体を変更する事は無い。 上記の処理で、データソースを変更したい場合は、 numbers = numbers.OrderBy(i = i % 3).ThenByDescending(i = i).ToArray(); と並べ替えメソッドの最後に、ToArray()をつけ、その時点での問い合わせ結果を配列オブジェクトとして生成する。 また、 private void Test() { int[] numbers = { 1, 3, 5, 7, 9, 2, 4, 6, 8 }; // 配列全体の平均値 Console.WriteLine(numbers.Average()); // 配列の要素数 (numbers.Lengthと同じ) Console.WriteLine(numbers.Count()); // 配列内の5以下の数値の平均値 Console.WriteLine(numbers.Where(i= (i =5)).Average()); // 配列内の偶数値の要素数 Console.WriteLine(numbers.Where(i = (i =5)).Count()); } の様な事も出来る。 ファイル名検索 System.IO.DirectoryクラスのGetFilesメソッドを使うとファイル名を手軽に指定したディレクトリ下のファイルをフルパスで文字列配列として取得できる。 string[] sFiles = Directory.GetFiles(@"c \temp"); とすると、c \tempディレクトリ下のファイル名を取得できる。 string[] sFiles = Directory.GetFiles(@"c \temp", "*.txt"); とすると、c \tempディレクトリ下の、拡張子がtxtのファイル名を取得できる。 ただし、上記の方法では、サブディレクトリ下を検索していない。 そこで、サブディレクトリも検索対象とする場合は、SearchOptionを指定し、 string[] sFiles = Directory.GetFiles(@"c \temp", "*.txt", SearchOption.AllDirectories); とする事で、c \temp以下の全てのディレクトリ下にある、拡張子がtxtのファイルを取得できる。 なお、無効なディレクトリを指定した場合は、例外が発生する。 ファイルやディレクトリの存在確認 System.IO.FileクラスのExistsメソッドを使うとファイルの存在確認が手軽に実現できる。 if (File.Exists(@"c \temp\foo.txt")) { // ファイルが存在する } また、System.IO.DirectoryクラスのExistsメソッドを使えば、ディレクトリの存在確認を行える。 Drag Drop Drag Dropを実現するためには フォームのAllowDropプロパティをtrueにする Drag Dropの準備を行うDragEnterイベントを作成する Drag Dropされたファイル名などを受け取るDragDropイベントを作成する を行う必要がある。 Drag Dropで複数のファイルを受け取る処理の場合、 private void Form1_DragEnter(object sender, DragEventArgs e) { // ファイルをDrag Dropの処理対象にする場合 if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.All; } private void Form1_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { string[] sFiles = (string[])e.Data.GetData(DataFormats.FileDrop); Array.Sort(sFiles); // ファイル名を並べ替えたいときには必要 foreach (string sFileName in sFiles) Console.WriteLine(sFileName); } } の様になる。 コレクション コレクションの中身を順次処理する場合、 Dictionary string, string dic = new Dictionary string, string (); dic.Add("Jan", "睦月"); dic.Add("Feb", "如月"); … foreach (string sKey in dic.Keys) { Console.WriteLine(dic[sKey]); } の様に、foreachを使用する事が多いと思うが、foreach中でコレクションを処理しながら、削除処理を行う foreach (string sKey in dic.Keys) { Console.WriteLine(dic[sKey]); dic.Remove(sKey); } の様な処理を実行すると、コレクションが変更されたと言う事で、InvalidOperationExceptionの例外が発生する。 この様なときには、 string[] sKeys = new string[dic.Count]; dic.Keys.CopyTo(sKeys, 0); foreach (string sKey in sKeys) { Console.WriteLine(dic[sKey]); dic.Remove(sKey); } と、キー(dic.Keys)の値をCopyToメソッドを使用して一旦取り出して処理をすると良い?
https://w.atwiki.jp/12kokuki/pages/45.html
作品規模マスタ(M_SCALE) 漫画や小説を扱っているサイトの場合に登録可能な、長編/短編の別を定義するマスタテーブル。 もっともウェブだと、市販の書籍のような一般的な基準ではなく作者の感性で「長編」「短編」と銘打っているため、説明文にサーチ内での共通認識としての定義も格納しておく。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ SORT_KEY INTEGER 表示制御用 NAME TEXT ○ 名称 DESC TEXT 説明文 CREATE文 CREATE TABLE [M_SCALE] ( [ID] INTEGER NOT NULL ,[SORT_KEY] INTEGER ,[NAME] TEXT NOT NULL ,[DESC] TEXT ,PRIMARY KEY(ID) ); 登録データ一覧 DESCに書いた定義は適当。 ID SORT_KEY NAME DESC 1 1 掌編 漫画:1~8頁、小説:~2000字 2 2 短編 漫画:9~16頁、小説:2001~5000字 3 3 中編 漫画:17~32頁、小説:5001~20000字 4 4 長編 漫画:33頁~、小説:20001字~ 初期設定用INSERT文 INSERT INTO M_SCALE(ID,SORT_KEY,NAME,DESC) VALUES(1,1,'掌編','漫画:1~8頁、小説:~2000字'); 以下、VALUES以降のみ掲載 VALUES(2,2,'短編','漫画:9~16頁、小説:2001~5000字'); VALUES(3,3,'中編','漫画:17~32頁、小説:5001~20000字'); VALUES(4,4,'長編','漫画:33頁~、小説:20001字~'); 2010/09/06 10 57 40
https://w.atwiki.jp/r1025/pages/47.html
VB 内容 クラス(構造体)名 整数 Byte 8ビット符号なし整数 Byte Shot 16ビット符号なし整数 Int16 Integer 32ビット符号なし整数 Int32 Long 64ビット符号なし整数 Int64 浮動小数点数 Single 単精度(32ビット)浮動小数点数(信用できる範囲7桁) Single Double 倍精度(64ビット)浮動小数点数(信用できる範囲14桁) Double 10進数 Decimal 16ビット10進値(整数、少数の両方で、多くの桁精度(28桁まで)が必要な場合使用) Decimal ブール型 Boolean ブール値(true または false) Boolean 列挙型 Enum 列挙 Enum 文字 Char Unicode(16ビット)文字 Char String Unicode文字の不変固定長文字列 String StringBuilder 可変型の文字列 StringBuilder 日付や時間 Date 日付と時刻 DateTime TimeSpan 時間間隔 TimeSpan オブジェクト Object オブジェクトを保持する変数の型 Object 配列 配列 Array ユーザー定義 Structure 構造体 Structure 「クラス(構造体)名」は.NET Frameworkが提供するクラス(構造体)の名前。 「VB」でも「C#」でも有効。 Dim intKazu As integer Dim intKazu As int32 この二つの宣言は同じ意味を持つ。 トータル: - /今日: - /昨日: -
https://w.atwiki.jp/j_liargame/
imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 (2012.1.22) 『ライアーゲーム j-net.』 サイトオープン! imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 ?cmd=upload act=open page=%E3%80%80 file=kxM1e.jpeg imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 ?cmd=upload act=open page=%E3%80%80 file=JNTTd.jpeg imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 ?cmd=upload act=open page=%E3%80%80 file=crBvf.jpeg
https://w.atwiki.jp/mei0607/
お役立ち情報、稼げる情報を提供中です。 ヤフオク有料情報も暴露しちゃいます。
https://w.atwiki.jp/nicepaper/pages/240.html
今回は前回少し出てきたPHPのデータ型について勉強してみました。 型の種類 PHP8種類のデータ型が存在します。 整数 integer 浮動小数点数 float 文字列 string 論理値 boolean 配列 array オブジェクト object NULL null RESOURCE resource 上の4つがスカラー型、真ん中の2つが複合型、下の2つが特別型となっています。 型の変換(キャスト) PHPにおいてはほとんどの場合、型の変換は自動で行われます。 明示的に行いたい場合には $foo = (int)$bar; といった書き方になります。 型のキャスト (bool) 論理値 (boolean) 論理値 (int) 整数 (integer) 整数 (float) 浮動小数点 (double) 浮動小数点 (real) 浮動小数点 (string) 文字列 (array) 配列 (object) オブジェクト (unset) NULL これはPHPマニュアルでは bool is_int ( mixed $var ) のように定義されています。 コード 上の事を踏まえて次のようなコードを書いてみました。 ?php $a = 4; $b = 3 ; echo is_int($a)." br "; echo is_int($b)." br "; echo is_string($a)." br "; echo is_string($b)." br "; var_dump($a); echo " br "; var_dump($b); echo " br "; echo gettype($a)." br "; echo gettype($b)." br "; //型が違うけどあえて変換してみる。 $c = $a + $b; echo $c." br "; var_dump($c); ? 実行結果 1 1 int(4) string(1) "3" integer string 7 int(7) 注意 型名の取得にgettypeというものがあるようですが、こちらは使用すべきでないと言われています。 以上